#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
};
 
//int i = 0;
//void PrevOrder(int** a, struct TreeNode* root)
//{
//    if (root == NULL)
//    {
//        (*a)[i] = root->val;
//        i++;
//        return;
//    }
//    (*a)[i] = root->val;
//    i++;
//    PrevOrder(&a, root->left);
//    PrevOrder(&a, root->right);
//}
//
//bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
//{
//    int a1[100] = { 0 }, a2[100] = { 0 };
//    PrevOrder(&a1, p);
//    i = 0;
//    PrevOrder(&a2, q);
//    for (int j = 0; j < 100; j++)
//    {
//        if (a1[i] != a2[j])
//            return false;
//    }
//    return true;
//}

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{
    if (p == NULL && q == NULL)
    {
        return true;
    }
    else if (p == NULL || q == NULL)
    {
        return false;
    }
    else if (p->val != q->val)
    {
        return false;
    }
    else
    {
        return isSameTree(p->left, q->left)
            && isSameTree(p->right, q->right);
    }
}